package com.heima;

import org.junit.Test;

import java.sql.*;

/**
 * API详解：PreparedStatement的使用，模拟用户登录
 * 解决SQL注入问题
 */

public class JDBC_PreparedStatementDemo1 {

    @Test
    public void sPreparedStatement_login() throws Exception{
        //1.注册驱动
//        Class.forName("com.mysql.jdbc.Driver");//可以不写

        //2.获取数据库连接
//        String url="mysql:jdbc://127.0.0.1:3306/user?useSSL=false";//连接本机主机名和端口号可以省略
        String url="jdbc:mysql:///test?useSSL=false&useServerPrepStmts=true";
        String username="root";
        String password="18307096730..";
        Connection conn = DriverManager.getConnection(url, username, password);

        //定义用户名和密码
        String name="zhangsan";
        String pw="123";
        //3.定义sql查询语句，使用?占位符表示要传入的参数，不使用sql直接拼接
//        String sql="select *from user where username='"+name+"' and password='"+pw+"'";
        String sql="select *from user where username=? and password =?";
        //4.获取预编译sql执行对象
        PreparedStatement pstmt = conn.prepareStatement(sql);

        //5.设置？占位符的值
        pstmt.setString(1,name);//第一个参数是？的位置编号
        pstmt.setString(2,pw);//设置第二个？的值

        //6.执行sql
        ResultSet rs = pstmt.executeQuery();//不需要传入sql

        //7..如果查询到数据就是登陆成功
        if (rs.next()){
            System.out.println("登陆成功~~~");
        }else{
            System.out.println("登陆失败~~~");
        }

        //8.关闭资源
        rs.close();
        pstmt.close();
        conn.close();

    }


}
